
// package comlib

// import chisel3._
// import chisel3.util._

// /**指针处理Middleware
//  */
// class PointerMiddleware{

//   /**获取指针表index值
//    *
//    * 最早调用
//    *
//    * @param keys 指针查找关键字
//    * @return 返回指针索引值
//    *
//    * 默认为各个关键字的简单拼接
//    */
//   def getIndex(keys:UInt*) = {
//     Cat(keys)
//   }

//   /**计算当前调度指针函数模板
//    *
//    * 在从指针表拿到指针，准备赋值给调度器时调用
//    *
//    * @param ptr 上一步PointerMiddleware计算的指针
//    * @param args 其它用于计算指针值的辅助参数
//    * @return 返回新的指针值
//    *
//    * 默认输出指针`ptr`
//    */
//   def getPointer(ptr:UInt, args:UInt) = {
//     ptr
//   }

//   /**指针更新处理
//    *
//    * 在调度完成后，需要回写指针信息到指针表时调用
//    *
//    * @param gnt 调度器选中的请求对应的序号
//    * @return 新的更新指针值
//    *
//    * 默认为`gnt`加1
//    */
//   def updatePointer(gnt:UInt) = {
//     gnt + 1.U
//   }

//   def bindLast(pm:PointerMiddleware) = {
//     this.pm = pm
//     this
//   }

//   private var pm:PointerMiddleware;

// }


// class SelectKeyMiddleware extends PointerIndexMiddleware {

//   def selectKey(keys:UInt*) = {
//   }
// }

// class MaxAvoid(bankFrees:Vec[UInt]) extends PointerMiddleware{

//   val lastPtr = Reg(UInt())

//   def minFreeBank : UInt

//   override def getPointer(ptr:UInt, args:UInt) = {
//     lastPtr := ptr
//     minFreeBank + 1.U
//   }

//   override def updatePointer(gnt:UInt) = {
//     lastPtr
//   }

// }

// class MinPriority(bankFrees:Vec[UInt]) extends PointerMiddleware {

//   def minFreeBank : UInt

//   override def getPointer(ptr:UInt, args:UInt) = {
//     minFreeBank
//   }

// }

// class RandomPosition(period:UInt, reqNum:UInt) extends PointerMiddleware {

// }


// class Pointer(ptrNum:Int, reqNum:Int) {

//   val ptrs = VecInit(Seq.fill(ptrNun)(0.U(log2Ceil(reqNum))))

// }
